/**
 * 
 */
package co.edu.javeriana.ia.ga;

import java.io.FileInputStream;
import java.util.Properties;

/**
 * <p>
 * Clase de constantes utilizadas en el algoritmo
 * </p>
 * 
 * @author <a href=f.triana@javeriana.edu.co">Alejandro Triana</a>
 * @version 1.0
 */
public class Constants {

	static Properties prop;

	static {

		try {

			String propFile = System.getProperty("conf.file");

			prop = new Properties();

			if (propFile == null) {
				prop.load(new FileInputStream("./data/ga.properties"));
			} else {
				prop.load(new FileInputStream(propFile));
			}

		} catch (Exception e) {
			throw new RuntimeException("Error to read properties file");
		}
	}

	/**
	 * <p>
	 * Separador de reglas
	 * </p>
	 */
	public static final String RULE_SEPARATOR = "|";

	/**
	 * <p>
	 * Separador de condiciones
	 * </p>
	 */
	public static final String CONDITION_SEPARATOR = ":";

	/**
	 * <p>
	 * Separador de propiedades del bean
	 * </p>
	 */
	public static final String PROPERTY_SEPARATOR = ",";

	/**
	 * <p>
	 * Total de secuencias del archivo
	 * </p>
	 */
	public static final int TOTAL_SEQUENCES;

	/**
	 * <p>
	 * Valor maximo de la frecuencia discretizada
	 * </p>
	 */
	public static final int MAX_VALUE_FRECUENCY_DESCRIPTOR;

	/**
	 * <p>
	 * Valor minimo de la frecuencia discretizada
	 * </p>
	 */
	public static final int MIN_VALUE_FRECUENCY_DESCRIPTOR;

	/**
	 * <p>
	 * Maximo numero de genes (reglas) que contiene un chromosoma
	 * </p>
	 */
	public static final int MAX_NUM_GENES;

	/**
	 * <p>
	 * Maximo numero de descriptores
	 * </p>
	 */
	public static final int MAX_NUM_DESCRIPTORS;

	/**
	 * <p>
	 * Archivo de directorio, donde se encuentran las secuencias
	 * </p>
	 */
	public static final String DATA_DIRECTORY;

	/**
	 * <p>
	 * Archivo de descriptores (codones)
	 * </p>
	 */
	public static final String DESCRIPTORS_FILE;
	
	/**
	 * <p>
	 * Archivo de descriptores (codones)
	 * </p>
	 */
	public static final String SEQUENCE_TEST_FILE;

	/**
	 * <p>
	 * Sufijo de los archivos de secuencia
	 * </p>
	 */
	public static final String FASTA_SUFIX_FILE;

	/**
	 * <p>
	 * Archivo con las secuencias de entrenamiento
	 * </p>
	 */
	public static final String SEQUENCE_FILE;

	/**
	 * <p>
	 * Numero de iteraciones del algoritmo genetico
	 * </p>
	 */
	public static final Integer ITERATIONS;

	/**
	 * <p>
	 * Tamanio de la poblacion
	 * </p>
	 */
	public static final int POPULATION_SIZE;

	/**
	 * <p>
	 * Listado de genomas seleccionado
	 * </p>
	 */
	public static final String GENOME_FILE;

	/**
	 * <p>
	 * Archivo de log
	 * </p>
	 */
	public static final String FILE_LOG;

	static {

		DESCRIPTORS_FILE = (String) prop
				.get("co.edu.javeriana.ia.ga.descriptorfile");
		SEQUENCE_FILE = (String) prop
				.get("co.edu.javeriana.ia.ga.sequencelearn");
		GENOME_FILE = (String) prop.get("co.edu.javeriana.ia.ga.genomefile");
		ITERATIONS = Integer.valueOf((String) prop
				.get("co.edu.javeriana.ia.ga.iterations"));
		POPULATION_SIZE = Integer.valueOf((String) prop
				.get("co.edu.javeriana.ia.ga.population.size"));
		DATA_DIRECTORY = (String) prop.get("co.edu.javeriana.ia.ga.datadir");
		FILE_LOG = (String) prop.get("co.edu.javeriana.ia.ga.filelog");
		FASTA_SUFIX_FILE = (String) prop
				.get("co.edu.javeriana.ia.ga.fastasuffix");
		SEQUENCE_TEST_FILE = (String) prop
				.getProperty("co.edu.javeriana.ia.ga.testfile");
		TOTAL_SEQUENCES = Integer.valueOf((String) prop
				.get("co.edu.javeriana.ia.ga.totalsequence"));
		MAX_VALUE_FRECUENCY_DESCRIPTOR = Integer.valueOf((String) prop
				.get("co.edu.javeriana.ia.ga.maxvaluefrecuency"));
		MIN_VALUE_FRECUENCY_DESCRIPTOR = Integer.valueOf((String) prop
				.get("co.edu.javeriana.ia.ga.minvaluefrecuency"));
		MAX_NUM_GENES = Integer.valueOf((String) prop
				.get("co.edu.javeriana.ia.ga.maxvaluegenes"));
		MAX_NUM_DESCRIPTORS = Integer.valueOf((String) prop
				.get("co.edu.javeriana.ia.ga.maxnumdescriptors"));
		
	}

}
